1.10 Variablen
 
Manchmal kann es passieren, dass das Programm sich den eingegebenen Namen »merken« muss. Sei es, weil er an mehreren Stellen verarbeitet wird, sei es, weil er erst später verarbeitet wird. Deshalb gibt es in jeder Programmiersprache Variablen. Der Wert
txtName.Text
soll vorübergehend mit Hilfe einer Variablen gespeichert werden. Damit bin ich wieder bei meinem Begriff von »Sauberkeit«. Eine Variable sollte sauber deklariert werden. Das passiert am Anfang der Prozedur, also in unserem Fall nach:
Private Sub cmdOk(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles cmdOk.Click
Die Syntax lautet:
Dim Variablenname as Variablentyp
beispielsweise:
Dim Benutzer As String
Es genügt übrigens auch hier, nach dem Schlüsselwort As die ersten drei Buchstaben »str« einzutippen. Dann springt die Markierung auf den korrekten Variablentyp. Mit (ÿ) kann das Ergebnis bestätigt werden.
Für den Namen der Variablen gibt es bestimmte Regeln. Der Name darf bis zu 255 Zeichen lang sein und alle Zeichen enthalten außer Leer-, Satz- und Sonderzeichen: .,;:-!»§$%&/(){<>}\^. Auch der Bindestrich »-« darf nicht verwendet werden. Dagegen sind der Unterstrich (»_«), Groß- und Kleinschreibung (VB.NET macht keine Unterschiede) sowie die zehn Ziffern erlaubt, das erste Zeichen darf allerdings keine Ziffer sein. Der Name der Variablen muss selbstverständlich eindeutig sein (es dürfen nicht zwei Variablen gleich heißen) und darf nicht mit einem Schlüsselwort übereinstimmen. Schlüsselwörter sind:
|
alle Befehle und Anweisungen: GoTo, Dim, As, If, While ... |
|
alle Funktionen: Sin, Cos, Date, Year ... |
|
alle logischen Operatoren: And, Or, Not ... |
|
andere Statements: AddressOf, As, Declare, Is, Let ... |
Folgender Name ist gültig:
x, Hugo, Mein_erster_Platzhalter, R2D2 oder H2SO4
Auch die Namen der Variablen sollten ein Präfix besitzen, an dem ihr Typ erkennbar ist. Diese Konvention, die von der Firma Gregory Reddick & Associates, einer Unternehmensberatung von Microsoft, herausgegeben wurde, ist nicht verbindlich. Allerdings arbeiten sehr viele Programmierer damit (ich zum Beispiel). Die Konvention stellt eine Möglichkeit der Standardisierung für VB.NET-Programmierung dar. Sie müssen sich natürlich nicht daran halten, sollten sich aber, wenn Sie zu mehreren an einem Projekt programmieren, über die Benennung der Variablen einig sein.
Hier die Liste der Variablentypen:
Tabelle 1.3
Liste der Variablentypen in VB.NET
| Datentyp
|
Variablentyp
|
Erklärung
|
| Text
|
String
|
Zeichenkette, also beliebig viele Buchstaben und Ziffern
|
|
|
Char
|
nur ein Zeichen (Unicode 16-Bit-Zeichen)
|
| Zahlen ohne Kommastellen
|
Byte
|
ganze Zahl zwischen 0 und 255
|
|
|
Short
|
ganze Zahl zwischen -32.768 und 32.767
|
|
|
Integer
|
ganze Zahl zwischen -2.147.483.648 und 2.147.483.647
|
|
|
Long
|
ganze Zahl zwischen -9.223.372.036.854.775.808 und 9.223.372.036.854.775.807
|
| Zahlen mit Kommastellen
|
Single
|
einfach genaue Fließkommazahl
|
|
|
Double
|
doppelt genaue Fließkommazahl
|
|
|
Decimal
|
Fließkommazahl (96-Bit-Zahl)
|
| Wahrheitswert
|
Boolean
|
»Wahr« oder »Falsch«
|
| Datumsangaben
|
Date
|
Datum
|
|
|
DateTime
|
Datum mit Uhrzeitangabe
|
| Objekte
|
Object
|
Objekte, wie andere Programme, Tabellen, Dateien .
|
Abbildung 1.20
Eine Variable wird deklariert.
Wer sich die Liste genau ansieht und mit der Auswahlliste in VB.NET vergleicht, stellt fest, dass ich nicht alle Typen mit diesem blauen Kästchen-Symbol erklärt habe. Das ist korrekt. Einige Typen (Int16, Int32, Int64, UInt16 ...) sind interne Datentypen und stehen zum Austausch mit C# zur Verfügung, sie sind also für uns uninteressant. Eine ganze Reihe von Elementen dieser Liste hat andere Symbole. Über einige davon werden wir noch sprechen. Doch zuerst möchte ich, dass die Datentypen jedem klar sind. Ich nenne ein Element und Sie überlegen sich, wie man es deklarieren würde.
Nehmen wir ein Beispiel. Schuhgröße?
Byte.
Richtig. Lebensalter?
Byte.
Richtig. Postleitzahlen?
Short.
Falsch. Short läuft bis 32.767. Damit könnten wir keine mittel- und süddeutschen Postleitzahlen (südlich von Detmold) eingeben. Schade um die Bayern.
Okay, Integer.
Auch das ist ungünstig: die Sachsen machen ein Problem. Leipzig Innenstadt hat beispielsweise die Postleitzahl 04105. Ich würde String verwenden. In Österreich oder der Schweiz sieht es in puncto Postleitzahlen anders aus: Dort sind Postleitzahlen vierstellig und haben keine führende Null. Bankleitzahl?
Bankleitzahlen haben maximal acht Stellen. Meine beginnt mit einer »7«. Short ist zu kurz, Integer müsste passen.
Korrekt. Kontonummer?
Uh, die können lang sein: Double?
Richtig. Kontonummern können bis zu zehn Ziffern lang sein. Also wäre Integer zu kurz. Mit Long kommt man auch aus. Aber sicher ist sicher. Double ist besser.
Telefonnummern?
Auch Double?
Nein. Denken Sie mal an die führende Null bei der Vorwahl, an den Schrägstrich oder das Leerzeichen. Das muss auch als String eingegeben werden; und Hausnummern ebenfalls. Ich wohne in der Magnus-Hirschfeld-Straße 7b.
Wenn Sie mit Präfixen arbeiten, dann stehen Ihnen folgende Präfixe zur Verfügung:
Tabelle 1.4
Die Liste der Variablentypen und ihrer Präfixe
| Variablentyp
|
Kürzel
|
Beispiel
|
Speicherplatz
|
| String
|
str
|
strName
|
|
| Char
|
char
|
charZeichen
|
nur ein Zeichen (Unicode 16-Bit-Zeichen)
|
| Byte
|
byt
|
bytAlter
|
ganze Zahl zwischen 0 und 255
|
| Short
|
|
|
ganze Zahl zwischen
-32.768 und 32.767
|
| Integer
|
int
|
intArtikelnummer
|
ganze Zahl zwischen -2.147.483.648 und 2.147.483.647
|
| Long
|
lng
|
lngKontonummer
|
ganze Zahl zwischen -9.223.372.036.854.775.808 und 9.223.372.036.854.775.807
|
| Single
|
sng
|
sngGewicht
|
einfach genaue Fließkommazahl
|
| Double
|
dbl
|
dblDistanz
|
doppelt genaue Fließkommazahl
|
| Decimal
|
dec
|
decWarp
|
Fließkommazahl (96-Bit-Zahl)
|
| Boolean
|
f
|
FSchalter
|
»Wahr« oder »Falsch«
|
| Date
|
dat
|
DatDatum
|
Datum
|
| DateTime
|
tim
|
TimUhrzeit
|
Datum mit Uhrzeitangabe
|
Mehrere Variablen können gleichzeitig deklariert werden. Entweder vom gleichen Typ:
Dim intZahl1, intZahl2, intZahl3 As Integer
oder als unterschiedliche Typen:
Dim x As Integer, decGewicht As Decimal, _
strName As String
Ein Wort zu Char: Eine Variable vom Typ String wird folgendermaßen deklariert:
Dim strText As String = "Harry Potter"
Wenn Sie diesen Typ verwenden, dann dürfen Sie nicht wie bei String analog schreiben:
Dim charZeichen as Char = "Y"
sondern müssen es mit dem Litteral »c« kennzeichnen:
Dim charZeichen as Char = "Y"c
Aber vielleicht können wir auch ganz auf diesen Datentyp verzichten und verwenden lediglich String.
Übrigens könnte man auf die Variablendeklaration sogar verzichten (dies wird implizite Variablendeklaration genannt). Man könnte unter Projekt . Eigenschaften einstellen, dass keine Variablendeklaration erforderlich ist (Kategorie »Erstellen«). Dort könnte man die Option Explicit auf »Off« setzen. Dann wird die Variable einfach im Code verwendet. Dies hat allerdings einige Nachteile:
Wird eine Variable deklariert und wird sie im Quellcode falsch geschrieben, dann wird dies gekennzeichnet. Wird eine Variable nicht deklariert, so bekommt sie den Datentyp Object zugewiesen, der sehr viel mehr Speicherplatz benötigt. Insgesamt wird das Programm langsamer und fehleranfälliger. Das heißt: Das Risiko, dass das Programm abstürzt, ist größer. Also, Variablen immer deklarieren! Es hat nur Vorteile.
Abbildung 1.21
Eine Variable wurde falsch geschrieben.
Vielleicht stellen Sie sich die ganze Zeit die Frage, warum wir dieses seltsame Spiel treiben. Die Antwort wurde oben schon gegeben. Gerechnet werden kann nur mit einer Zahl. Deshalb muss ich vorher wissen, ob die Eingabe als Berechnung weiterverarbeitet wird oder nicht. Nun könnte man argumentieren, dass dann zwei Typen genügen. Es gibt aber noch einen zweiten Grund für eine saubere Variablendeklaration: Speicherplatz. Je kleiner die Variablen deklariert sind, umso weniger Speicher benötigen sie. Wie viel sie brauchen, steht oben in der Liste. Zwar ist es bei zwei oder drei Variablen egal, ob sie vom Typ »Byte« oder »Double« sind, dafür sind unsere Rechner schon schnell genug. Aber bei vielen Hundert Variablen macht sich der Speicherplatz (oder nicht mehr vorhandene Arbeitsspeicher) in der Geschwindigkeit bemerkbar.
Zwar könnte man nun argumentieren, dass die Sache mit den Typen in VB.NET gar nicht so wichtig ist, weil das Programm die Typen automatisch konvertiert. Das sollten Sie jedoch vermeiden, da der Code instabiler wird. Zwar funktioniert:
Dim i As Integer = 7
MessageBox.Show("Die Zahl lautet: " & i)
besser ist aber folgende Lösung:
Dim i As Integer = 7
MessageBox.Show("Die Zahl lautet: " & _
i.ToString)
Man kann sich den »Fehler« anzeigen lassen, indem in Projekt . Eigenschaften im Ordner Erstellen . Option Strict eingeschaltet wird.
Also: Variablen sollten korrekt, so klein wie möglich und so groß wie nötig deklariert werden.
|